﻿using System;
using System.Collections;
using System.Configuration;
using System.Data;
using System.Linq;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.HtmlControls;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Xml.Linq;

public partial class Administrador_Operadores_InsertarOperador : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e){}

    //boton ingresar
    protected void ButtonIngresarOperador_Click(object sender, EventArgs e)
    {
        try
        {
            //validar los datos
            Validacion validador = new Validacion();

            bool es_valido = true;

            //validar rut///////////////////////////////////////////////////////////////////////////////////
            
            //ver si los campos están vacios
            if (TextBoxRut.Text.Trim().CompareTo("") == 0 &&
                TextBoxDigitoVerificador.Text.Trim().CompareTo("") == 0)
            {
                //si los campos del rut estan vacios no es valido
                es_valido = false;
                LabelMensajeIngresar.Text = "Rut o Número Verificador no pueden ser vacíos.";
                LabelMensajeIngresar.Visible = true;
            }

            //ver si los campos son numéricos
            //la expresion regular de la vista solo permite ingresar 0123456789, por lo tanto no pueden haber negativos

            //ver si los numeros pueden convertirse en variables Int32
            //verificar cast de rut
            if (es_valido == true)
            {//si ha pasado las pruebas anteriores
                string valor = TextBoxRut.Text;
                int number;
                bool res = Int32.TryParse(valor, out number);
                if (res == false)
                {//no se puede convertir el valor
                    es_valido = false;
                    LabelMensajeIngresar.Text = "Campo Rut esta sobre la capacidad permitida.";
                    LabelMensajeIngresar.Visible = true;
                }
            }

            //verificar cast de digito verificador
            //verificado en la vista

            //verificar algoritmo de rut
            if (es_valido == true)
            {//si paso lo anterior, seguir verificando
                string dig_v = TextBoxDigitoVerificador.Text.ToLower().Trim();
                string dig_r = validador.validaRut(int.Parse(TextBoxRut.Text.Trim()));

                if (dig_r != dig_v)
                {//la validacion del rut ha fallado
                    es_valido = false;
                    LabelMensajeIngresar.Text = "Rut no válido.";
                    LabelMensajeIngresar.Visible = true;
                }
            }

            //validar nombre//////////////////////////////////////////////////////////////////////////////
            //validador de la vista regula que exista un nombre

            //validar fono////////////////////////////////////////////////////////////////////////////////
            //el campo fono puede ser vacio, en el caso que no lo sea debe ser validado con tryParse
            if (es_valido == true)
            {//si ha pasado las pruebas anteriores
                if (TextBoxTelefono.Text.Trim().CompareTo("") != 0)
                {// si existe algo dentro del campo
                    string valor = TextBoxTelefono.Text.Trim();
                    int number;
                    bool res = Int32.TryParse(valor, out number);
                    if (res == false)
                    {
                        LabelMensajeIngresar.Text = "El campo Teléfono esta sobre la capacidad permitida.";
                        LabelMensajeIngresar.Visible = true;
                    }
                }
            }

            //validar direccion//////////////////////////////////////////////////////////////////////////////
            //este campo no debe ser vacio, la vista se encarga de verificar si es vacio

            //validar correo
            //correo puede ser nulo, ademas es string, no necesita validacion
            //la vista valida el correo con un prototipo usr@mail.cl


            //insertar operador///////////////////////////////////////////////////////
            if (es_valido == true)
            {//si ha pasado todas las pruebas
                //rescatar datos validados!

                int rut = int.Parse(TextBoxRut.Text.Trim());
                string nombre = TextBoxNombre.Text.Trim();
                int fono = int.Parse(TextBoxTelefono.Text.Trim());
                string direccion = TextBoxDireccion.Text.Trim();
                string correo = TextBoxCorreo.Text.Trim();

                OperadorBLL operadorbll = new OperadorBLL();//conexion con modelo

                int filas_afectadas = operadorbll.insertarOperador(rut, nombre, fono, direccion, correo);
                if (filas_afectadas == 0)
                {
                    LabelMensajeIngresar.Text = "Imposible ingresar operador.";
                    LabelMensajeIngresar.Visible = true;
                }
                else
                {
                    LabelMensajeIngresar.Text = "Operador ingresado exitósamente.";
                    LabelMensajeIngresar.Visible = true;
                }
            }

            
        }
        catch (Exception)
        {
            LabelMensajeIngresar.Text = "Error al ingresar operador, verifique que el operador no esté realizando ningún itinerario o que ya este registrado en el sistema.";
            LabelMensajeIngresar.Visible = true;
        }
    }
}
